package model;

/**
 * The {@link HasSourceVisitor} interface provides handle methods for {@link Operation}, {@link Constant} and {@link Variable}. 
 */
public interface HasSourceVisitor<T> {
	/**
	 * Method that executed when the implementation of {@link HasSource} is an {@link Operation}.
	 * @param operation is an {@link Operation}.
	 */
	void visit(Operation<?> operation);
	/**
	 * Method that executed when the implementation of {@link HasSource} is a {@link Constant}.
	 * @param constant is a {@link Constant}.
	 */
	void visit(Constant<T> constant);
	/**
	 * Method that executed when the implementation of {@link HasSource} is an {@link Variable}.
	 * @param variable is a {@link Variable}.
	 */
	void visit(Variable<T> variable);
}
